home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / comms / other / micq-0.4.0 / file_util.c < prev    next >
C/C++ Source or Header  |  1999-05-14  |  22KB  |  631 lines

  1. #include "micq.h"
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <stdarg.h>
  5. #include <assert.h>
  6. #include <string.h>
  7. #include <ctype.h>
  8. #include <errno.h>
  9. #include <time.h>
  10. #include <sys/types.h>
  11. #include <sys/time.h>
  12. #include <sys/stat.h>
  13. #include <netinet/in.h>
  14. #include <arpa/inet.h>
  15. #include <fcntl.h>
  16. #ifdef _WIN32
  17.    #include <io.h>
  18.    #define S_IRUSR        _S_IREAD
  19.    #define S_IWUSR        _S_IWRITE
  20. #endif
  21. #ifdef UNIX
  22.    #include <unistd.h>
  23.    #include <termios.h>
  24. #endif
  25.  
  26. #ifdef UNIX
  27. char *strdup( const char * );
  28. int strcasecmp( const char *, const char * );
  29. int strncasecmp( const char *, const char *, size_t );
  30. #endif
  31.  
  32. #ifdef __SASC
  33. #include <proto/dos.h>
  34. #endif
  35.  
  36. #define      ADD_COMMAND(a, b)     else if ( ! strcasecmp( tmp, a) )   \
  37.           {                                                          \
  38.               strncpy( b,strtok(NULL," \n\t"), 16 );                  \
  39.           }                                                          
  40.  
  41. #define      ADD_MESS(a, b)     else if ( ! strcasecmp( tmp, a) )   \
  42.           {                                                          \
  43.               strncpy( b,strtok(NULL,"\n"), 450 );                  \
  44.           }                                                          
  45.  
  46. static char rcfile[256];
  47.  
  48. static void Initalize_RC_File( void )
  49. {
  50.    FD_T rcf;
  51.    char passwd2[ sizeof(passwd) ];
  52.    strcpy( server, "icq1.mirabilis.com" );
  53.    remote_port = 4000;
  54.  
  55.    M_print( "Enter UIN or 0 for new UIN: #" );
  56.    fflush( stdout );
  57.    scanf( "%ld", &UIN );
  58. password_entry:
  59.    M_print( "Enter password : " );
  60.    fflush( stdout );
  61.    Echo_Off();
  62.    memset( passwd, 0, sizeof( passwd ) );
  63.    M_fdnreadln(STDIN, passwd, sizeof(passwd));
  64.    Echo_On();
  65.    if ( UIN == 0 )
  66.    {
  67.       if ( 0 == passwd[0] )
  68.       {
  69.          M_print( "\nMust enter password!\n" );
  70.          goto password_entry;
  71.       }
  72.       M_print( "\nReenter password to verify: " );
  73.       fflush( stdout );
  74.       Echo_Off();
  75.       memset( passwd2, 0, sizeof( passwd2 ) );
  76.       M_fdnreadln(STDIN, passwd2, sizeof(passwd));
  77.       Echo_On();
  78.       if ( strcmp( passwd, passwd2 ) )
  79.       {
  80.          M_print( "\nPasswords did not match reenter\n" );
  81.          goto password_entry;
  82.       }
  83.       Init_New_User();
  84.    }
  85.    set_status = STATUS_ONLINE;
  86.    Num_Contacts = 2;
  87.    Contacts[ 0 ].vis_list = FALSE;
  88.    Contacts[ 1 ].vis_list = FALSE;
  89.    Contacts[0].uin = 11290140;
  90.    strcpy( Contacts[0].nick, "Micq Author" );
  91.    Contacts[0].status = STATUS_OFFLINE;
  92.    Contacts[0].last_time = -1L;
  93.    Contacts[0].current_ip[0] = 0xff;
  94.    Contacts[0].current_ip[1] = 0xff;
  95.    Contacts[0].current_ip[2] = 0xff;
  96.    Contacts[0].current_ip[3] = 0xff;
  97.    Contacts[ 0 ].port = 0;
  98.    Contacts[ 0 ].sok = (SOK_T ) -1L;
  99.    Contacts[1].uin = -11290140;
  100.    strcpy( Contacts[1].nick, "alias1" );
  101.    Contacts[1].status = STATUS_OFFLINE;
  102.    Contacts[1].current_ip[0] = 0xff;
  103.    Contacts[1].current_ip[1] = 0xff;
  104.    Contacts[1].current_ip[2] = 0xff;
  105.    Contacts[1].current_ip[3] = 0xff;
  106.    Contacts[1].current_ip[0] = 0xff;
  107.    Contacts[1].current_ip[1] = 0xff;
  108.    Contacts[1].current_ip[2] = 0xff;
  109.    Contacts[1].current_ip[3] = 0xff;
  110.    Contacts[ 1 ].port = 0;
  111.    Contacts[ 1 ].sok = (SOK_T ) -1L;
  112.    
  113.     strcpy(message_cmd, "msg");
  114.     strcpy(info_cmd, "info");
  115.     strcpy(add_cmd, "add");
  116.     strcpy(quit_cmd, "q");
  117.     strcpy(reply_cmd, "r");       
  118.     strcpy(again_cmd, "a");
  119.     strcpy(list_cmd, "w");
  120.     strcpy(away_cmd, "away");
  121.     strcpy(na_cmd, "na");
  122.     strcpy(dnd_cmd, "dnd");   
  123.     strcpy(online_cmd, "online");
  124.     strcpy(occ_cmd, "occ");
  125.     strcpy(ffc_cmd, "ffc");
  126.     strcpy(inv_cmd, "inv");
  127.     strcpy(status_cmd, "status");
  128.     strcpy(auth_cmd, "auth");
  129.     strcpy(change_cmd, "change");
  130.     strcpy(auto_cmd, "auto");
  131.     strcpy(search_cmd, "search");
  132.     strcpy(save_cmd, "save");
  133.     strcpy(alter_cmd, "alter");
  134.     strcpy(msga_cmd, "msga");
  135.     strcpy(url_cmd, "url");
  136.     strcpy(update_cmd, "update");
  137.    
  138.    Current_Status = STATUS_ONLINE;
  139.    
  140.    rcf = open( rcfile, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
  141.    if ( rcf == -1 )
  142.    {
  143.       perror( "Error creating config file " );
  144.       exit( 1);
  145.    }
  146.    close( rcf );
  147.  
  148.    if ( Save_RC() == -1 )
  149.    {
  150.       perror( "Error creating config file " );
  151.       exit( 1);
  152.    }
  153. }
  154.  
  155. static void Read_RC_File( FD_T rcf )
  156. {
  157.    char buf[450];
  158.    char *tmp;
  159.    int i;
  160.     DWORD tmp_uin;
  161.    
  162.    message_cmd[0]='\0';/* for error checking later */
  163.    quit_cmd[0]='\0';   /* for error checking later */
  164.    info_cmd[0]='\0';   /* for error checking later */
  165.    reply_cmd[0]='\0';  /* for error checking later */
  166.    again_cmd[0]='\0';  /* for error checking later */
  167.    add_cmd[0]='\0';    /* for error checking later */
  168.  
  169.    list_cmd[0]='\0';   /* for error checking later */
  170.    away_cmd[0]='\0';   /* for error checking later */
  171.    na_cmd[0]='\0';     /* for error checking later */
  172.    dnd_cmd[0]='\0';    /* for error checking later */
  173.    online_cmd[0]='\0'; /* for error checking later */
  174.    occ_cmd[0]='\0';    /* for error checking later */
  175.    ffc_cmd[0]='\0';    /* for error checking later */
  176.    inv_cmd[0]='\0';    /* for error checking later */
  177.    status_cmd[0]='\0'; /* for error checking later */
  178.    auth_cmd[0]='\0';   /* for error checking later */
  179.    auto_cmd[0]='\0';   /* for error checking later */
  180.    change_cmd[0]='\0'; /* for error checking later */
  181.    search_cmd[0]='\0'; /* for error checking later */
  182.    save_cmd[0]='\0';   /* for error checking later */
  183.    alter_cmd[0]='\0';  /* for error checking later */
  184.    msga_cmd[0]='\0';   /* for error checking later */
  185.    url_cmd[0]='\0';   /* for error checking later */
  186.    update_cmd[0]='\0';   /* for error checking later */
  187.    sound_cmd[0]='\0';   /* for error checking later */
  188.    color_cmd[0]='\0';   /* for error checking later */
  189.    rand_cmd[0]='\0';   /* for error checking later */
  190.    Sound_Str[0]='\0';   /* for error checking later */
  191.    passwd[0] = 0;
  192.    UIN = 0;
  193.     
  194.    Contact_List = FALSE;
  195.    for ( i=1; !Contact_List || buf == 0; i++ )
  196.    {
  197. /*      M_print( "Starting Line " SERVCOL " %d" NOCOL "\n", i );*/
  198.       M_fdnreadln( rcf, buf, sizeof( buf ) );
  199.       if ( ( buf[0] != '#' ) && ( buf[0] != 0 ) )
  200.       {
  201.          tmp = strtok( buf, " " );
  202.          if ( ! strcasecmp( tmp, "Server" ) )
  203.             { strcpy( server, strtok( NULL, " \n\t" ) ); }
  204.          else if ( ! strcasecmp( tmp, "Password" ) )
  205.             { strcpy( passwd, strtok( NULL, "\n\t" ) ); }
  206.          else if ( ! strcasecmp( tmp, "Russian" ) )
  207.             {  Russian = TRUE; }
  208.          else if ( ! strcasecmp( tmp, "No_Log" ) )
  209.             { Logging = FALSE;   }
  210.          else if ( ! strcasecmp( tmp, "No_Color" ) )
  211.             { Color = FALSE;   }
  212.          else if ( ! strcasecmp( tmp, "UIN" ) )
  213.             {  UIN = atoi( strtok( NULL, " \n\t" ) );         }
  214.          else if ( ! strcasecmp( tmp, "port" ) )
  215.             {  remote_port = atoi( strtok( NULL, " \n\t" ) ); }
  216.          else if ( ! strcasecmp( tmp, "Status" ) )
  217.             {  set_status = atoi( strtok( NULL, " \n\t" ) ); }
  218.          else if ( ! strcasecmp( tmp, "Auto" ) )
  219.             { auto_resp = TRUE; }
  220.          ADD_COMMAND( "message_cmd", message_cmd )
  221.          ADD_COMMAND( "info_cmd", info_cmd )
  222.          ADD_COMMAND( "rand_cmd", rand_cmd )
  223.          ADD_COMMAND( "color_cmd", color_cmd )
  224.          ADD_COMMAND( "sound_cmd", sound_cmd )
  225.          ADD_COMMAND( "quit_cmd", quit_cmd )
  226.          ADD_COMMAND( "reply_cmd", reply_cmd )
  227.          ADD_COMMAND( "again_cmd", again_cmd )
  228.          ADD_COMMAND( "list_cmd", list_cmd )
  229.          ADD_COMMAND( "away_cmd", away_cmd )
  230.          ADD_MESS( "auto_rep_str_away", auto_rep_str_away )
  231.          ADD_MESS( "auto_rep_str_na", auto_rep_str_na )
  232.          ADD_COMMAND( "na_cmd", na_cmd )
  233.          ADD_COMMAND( "dnd_cmd", dnd_cmd )
  234.          ADD_MESS( "auto_rep_str_dnd", auto_rep_str_dnd )
  235.          ADD_MESS( "auto_rep_str_occ", auto_rep_str_occ )
  236.          ADD_MESS( "auto_rep_str_inv", auto_rep_str_inv )
  237.       else if ( ! strcasecmp( tmp, "Sound" ) ) {  
  238.         strcpy( Sound_Str, strtok( NULL, "\n\t" ) ); 
  239.         Sound = SOUND_CMD;
  240.       }
  241.          ADD_COMMAND( "online_cmd", online_cmd )
  242.          ADD_COMMAND( "occ_cmd", occ_cmd )
  243.          ADD_COMMAND( "ffc_cmd", ffc_cmd )
  244.